/*Copyright (C) 2009 - 2011 Careil Baptiste

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef FICHIERS_H_INCLUDED
#define FICHIERS_H_INCLUDED

/* Permet de copier un fichier.
** \param dest_file Le fichier de destination
** \param orig_file Le fichier d'origine
** \return          0 en cas de succès
**                  Une autre valeure en cas d'erreur
*/
int fichier_cpy(FILE *dest_file, FILE *orig_file);

/* Permet de copier un nombre de lignes `nb_lines' depuis le
** fichier `orig' dans le fichier `dest'. La position dans les
** fichiers est inchangée avant l'oppération.
** \param dest     Le fichier de destination de la copie.
** \param orig     Le fichier d'origine de la copie.
** \param nb_lines Le nombre de lignes à copier de `orig' dans `dest'
** \return         0 en cas de succès.
**                 -1 en cas d'erreur.
*/
int fichier_cpy_n_lines(FILE *dest, FILE *orig, int nb_lines);

/* Permet de remplacer le contenue de `orig' à partir de la ligne `line'
** par le contenue du fichier `patch' jusqu'à l'`EOF' de `patch' si
** `insert' vaut `false' ou insérer le contenue de `patch' dans le fichier
** `dest' à partir de la ligne `line' du fichier `orig' si `insert'
** vaut `true'.
** \param dest    Le fichier de destination de l'oppération.
** \param orig    Le fichier d'origine à "patcher"
** \param patch   Le fichier de pactch qui viendra compléter `orig'
** \param line    La ligne à partir de laquelle débuter l'oppération.
** \param instert Indique si le contenu de `patch' doit être inséré dans
**                `orig' (insert == true) où si le contenu de patch doit
**                remplacer celui de `orig' à partir de la ligne `line'
**                (insert == false)
** \return        0 en cas de succès
**                -1 en cas d'erreur.
*/
int fichier_merge(const char *dest, const char *orig, const char *patch, int line, bool insert);

/* Permet de se déplacer à la ligne voulue. Le fichier
** est "rewind" avant l'oppération.
** \param file Le fichier où se déplacer.
** \param line La ligne où se déplacer.
** \return     0 en cas de succès.
**             -1 en cas d'erreur.
*/
int fichier_goto_line(FILE *file, int line);

/* Permet de se déplacer à la ligne suivante.
** \param file Le fichier où se déplacer.
** \return     0 en cas de succès.
**             -1 en cas d'erreur.
*/
int fichier_goto_next_line(FILE *file);

/* Récupère la valeur du caractère à la position indiquée.
** La position dans le fichier vaut `offset' + 1 après
** l'opération s'il n'y a pas d'erreur.
** \param pos  La position où chercher le caractère.
** \param file Le fichier où récupérer le caractère.
** \return     EOF en cas d'échec. A ce moment là, la
**             position dans le fichier est inconnue.
**             La valeur du caractère en cas de succès.
*/
char fichier_get_char(FILE *file, long offset, int origin);

/* Vérifie la présence d'un fichier.
** \param filename Le nom du fichier à vérifier.
** \return         true si le fichier existe.
**                 false si le fichier n'existe pas.
*/
bool fichier_existe(const char *filename);

/* Créé un fichier.
** \param filename Le nom du fichier à créer.
** \return         0 en cas de succès.
**                 1 en cas d'erreur.
*/
int fichier_creer(const char *filename);

/* Créé un dossier.
** \param folder Le nom du fichier à vérifier.
** \return       true si le dossier est bien créé.
**               false si le dossier n'a pas pu être créé.
*/
bool new_folder(const char *folder);

/* Vérifie la présence d'un dossier.
** \param folder Le nom du dossier à vérifier.
** \return       true si le dossier existe.
**               false si le dossier n'existe pas.
*/
bool existe_folder(const char *folder);

#endif /* FICHIERS_H_INCLUDED*/
